For seven innings, the game was a pitchers' duel between Cleveland rookie Tanner Bibee and the Angels' Patrick Sandoval.
Zach Elfin (5-1) got the win after allowing four runs on seven hits in his six innings, striking out nine and walking one.
Royals starter Jordan Lyles (0-7) was tagged for seven runs in 2 1/3 innings, allowing four hits and three walks.
The loss overshadowed another strong outing by Giants starter Logan Webb, who allowed one run on three hits over seven innings.
Boston's Corey Kluber (2-5) surrendered four runs on seven hits in five innings.